﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocio.servicios;
using negocio.entidades;
using System.Data;

namespace Swimmers.form
{
    public partial class Profesor : System.Web.UI.Page
    {

        private enum State { Agregar, Editar, Ver }

        private ProfesorService profesorService = new ProfesorService();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                panelGrilla.Visible = true;
                panelFormulario.Visible = false;
                CargarCombos();
                CargarGrilla();
            }
        }

        private void CargarGrilla()
        {
            gvProfesores.AllowPaging = true;
            gvProfesores.DataSource = profesorService.ObtenerTodo(); 
            string[] keys = new string[1];
            keys[0] = "id_profesor";
            gvProfesores.DataKeyNames = keys;
            gvProfesores.DataBind();

        }

        private void CargarCombos()
        {            
            cmbTipoDoc.DataSource = profesorService.obtenerTiposDoc();
            cmbTipoDoc.DataTextField = "descripcion";
            cmbTipoDoc.DataValueField = "id_tipo_doc";
            cmbTipoDoc.DataBind();
            cmbTipoDoc.SelectedIndex = -1;
            cmbTipoDoc.Items.Insert(0, " ");
        }

        private void Guardar()
        {
            if (Page.IsValid)
            {
                if ((State)Session["estado"] == State.Agregar)
                {
                    profesorService.Insertar(MapFormToProfesor());
                }
                else if ((State)Session["estado"] == State.Editar)
                {
                    profesorService.Modificar(MapFormToProfesor());
                }
            }
            CargarGrilla();
        }

        private negocio.entidades.Profesor MapFormToProfesor()
        {
            negocio.entidades.Profesor profesor = new negocio.entidades.Profesor();
            profesor.Id = Int32.Parse(txtNroDocumento.Text);
            profesor.TipoDoc = Int32.Parse(cmbTipoDoc.SelectedValue);
            profesor.Nombre = txtNombre.Text;
            profesor.Apellido = txtApellido.Text;
            profesor.Email = txtEmail.Text;
            profesor.Telefono = txtTelefono.Text;
            profesor.Direccion = txtDireccion.Text;
            return profesor;
        }

        private void MapProfesorToForm(negocio.entidades.Profesor n)
        {
            txtNroDocumento.Text = n.Id.ToString();
            txtNombre.Text = n.Nombre;
            txtApellido.Text = n.Apellido;
            txtTelefono.Text = n.Telefono.ToString();
            txtEmail.Text = n.Email;
            cmbTipoDoc.SelectedValue = n.TipoDoc.ToString();
            txtDireccion.Text = n.Direccion;

        }

        private void HabilitarCampos()
        {
            txtNombre.Enabled = true;
            txtApellido.Enabled = true;
            txtEmail.Enabled = true;
            txtNroDocumento.Enabled = true;
            txtTelefono.Enabled = true;
            txtDireccion.Enabled = true;
            cmbTipoDoc.Enabled = true;
        }

        private void LimpiarCampos()
        {
            txtNombre.Text = "";
            txtApellido.Text = "";
            txtEmail.Text = "";
            txtNroDocumento.Text = "";
            txtTelefono.Text = "";
            txtDireccion.Text = "";
            cmbTipoDoc.ClearSelection();
        }

        protected void cmdAgregar_Click(object sender, EventArgs e)
        {
            Session["estado"] = State.Agregar;
            panelFormulario.Visible = true;
            panelGrilla.Visible = false;
            HabilitarCampos();
            btnAceptar.Visible = true;
            btnCancelar.Text = "Cancelar";
            LimpiarCampos();
        }

        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            Session["estado"] = State.Editar;
            panelFormulario.Visible = true;
            txtNroDocumento.Enabled = false;
            panelGrilla.Visible = false;
            negocio.entidades.Profesor profesor = profesorService.ObtenerPorId(Convert.ToInt32(gvProfesores.SelectedValue));
            MapProfesorToForm(profesor);
        }

        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            profesorService.Eliminar(Convert.ToInt32(gvProfesores.SelectedValue));
            CargarGrilla();
            panelFormulario.Visible = false;
            panelGrilla.Visible = true;
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            Guardar();
            panelFormulario.Visible = false;
            panelGrilla.Visible = true;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            panelFormulario.Visible = false;
            panelGrilla.Visible = true;
            LimpiarCampos();
        }

        protected void gvProfesores_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvProfesores.PageIndex = e.NewPageIndex;
            CargarGrilla();
        }

        protected void cmdRecargarGrilla_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        protected void cmdBuscarNombre_Click(object sender, EventArgs e)
        {
            if (txtDocumentoBuscar.Text.Length != 0)
            {
                if (profesorService.ObtenerPorIdDT(Int32.Parse(txtDocumentoBuscar.Text)).Rows.Count == 0)
                {
                    lblNotFound.Visible = true;
                    gvProfesores.DataSource = profesorService.ObtenerPorIdDT(Int32.Parse(txtDocumentoBuscar.Text));
                    gvProfesores.DataBind();
                }
                else
                {
                    lblNotFound.Visible = false;
                    gvProfesores.DataSource = profesorService.ObtenerPorIdDT(Int32.Parse(txtDocumentoBuscar.Text));
                    gvProfesores.DataBind();
                }
            }
        }

        protected void gvProfesores_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[1].Text = "Tipo Documento";
                e.Row.Cells[2].Text = "Documento";
                e.Row.Cells[3].Text = "Nombre";
                e.Row.Cells[4].Text = "Apellido";
                e.Row.Cells[5].Text = "Dirección";
                e.Row.Cells[6].Text = "Email";
                e.Row.Cells[7].Text = "Telefono";
            }
        }

    }
}